import sys

class WebConfig(object):
    '''python框架的web配置类变量，用于webui脚本执行中使用的过程数据缓存'''

    __DRIVER_ID = 'primary'
    __DRIVER_URL = ''
    __DRIVER_SESSION = ''
    __LAST_BROWSER_TYPE = ''
    __LAST_URL = ''
    __LAST_LOGIN_NAME = ''
    __LAST_MENU = ''
    __VUE_NAME = list()
    __IS_WEB_PROXY = False
    #不同项目需要，需要缓存的自定义数据方法此字典中，
    __CUSTOMIZE_DATA = dict()

    def __init__(self, driver_id):
        self.__DRIVER_ID = driver_id

    @property
    def driver_id(self):
        '''
        获取driver编号

        :Returns:
            返回driver编号

        :Example:
         - 例: id = web_config.driver_id
        '''
        return self.__DRIVER_ID

    @driver_id.setter
    def driver_id(self, driver_id):
        '''
        设置driver编号

        :Args:
         - driver_id: driver编号

        :Example:
         - 例: web_config.driver_id = id
        '''
        self.__DRIVER_ID = driver_id

    @property
    def driver_url(self):
        '''
        获取webdriver代理的url

        :Returns:
            返回webdriver代理的url

        :Example:
         - 例: url = web_config.driver_url
        '''
        return self.__DRIVER_URL

    @driver_url.setter
    def driver_url(self, driver_url):
        '''
        设置webdriver代理的url

        :Args:
         - driver_url: webdriver代理的url

        :Example:
         - 例: web_config.driver_url = driver.command_executor._url
        '''
        self.__DRIVER_URL = driver_url

    @property
    def driver_session(self):
        '''
        获取webdriver代理的session

        :Returns:
            返回webdriver代理的session

        :Example:
         - 例: session = web_config.driver_session
        '''
        return self.__DRIVER_SESSION

    @driver_session.setter
    def driver_session(self, driver_session):
        '''
        设置webdriver代理的session

        :Args:
         - driver_session: webdriver代理的session

        :Example:
         - 例: web_config.driver_session = driver.session_id
        '''
        self.__DRIVER_SESSION = driver_session

    @property
    def last_browser_type(self):
        '''
        获取上一次打开的浏览器类型

        :Returns:
            返回上一次打开的浏览器类型

        :Example:
         - 例: browser_type = web_config.last_browser_type
        '''
        return self.__LAST_BROWSER_TYPE

    @last_browser_type.setter
    def last_browser_type(self, last_browser_type):
        '''
        设置上一次打开的浏览器类型

        :Args:
         - last_browser_type: 上一次打开的浏览器类型

        :Example:
         - 例: web_config.last_browser_type = browser_type
        '''
        self.__LAST_BROWSER_TYPE = last_browser_type

    @property
    def last_url(self):
        '''
        获取上一次访问的url

        :Returns:
            返回上一次访问的url

        :Example:
         - 例: url = web_config.last_url
        '''
        return self.__LAST_URL

    @last_url.setter
    def last_url(self, last_url):
        '''
        设置上一次访问的url

        :Args:
         - last_url: 上一次访问的url

        :Example:
         - 例: web_config.last_url = url
        '''
        self.__LAST_URL = last_url

    @property
    def last_login_name(self):
        '''
        获取上一次登录的用户名

        :Returns:
            返回上一次登录的用户名

        :Example:
         - 例: login_name = web_config.last_login_name
        '''
        return self.__LAST_LOGIN_NAME

    @last_login_name.setter
    def last_login_name(self, last_login_name):
        '''
        设置上一次登录的用户名

        :Args:
         - last_login_name: 上一次登录的用户名

        :Example:
         - 例: web_config.last_login_name = login_name
        '''
        self.__LAST_LOGIN_NAME = last_login_name

    @property
    def last_menu(self):
        '''
        获取上一次访问的菜单

        :Returns:
            返回上一次访问的菜单

        :Example:
         - 例: menu = web_config.last_menu
        '''
        return self.__LAST_MENU

    @last_menu.setter
    def last_menu(self, last_menu):
        '''
        设置上一次访问的菜单

        :Args:
         - last_menu: 上一次访问的菜单

        :Example:
         - 例: web_config.last_menu = menu
        '''
        self.__LAST_MENU = last_menu

    @property
    def vue_name(self):
        '''
        获取访问的vue文件列表

        :Returns:
            返回访问的vue文件列表

        :Example:
         - 例: vue = web_config.vue_name
        '''
        return self.__VUE_NAME

    @vue_name.setter
    def vue_name(self, vue_name):
        '''
        设置访问的vue文件列表

        :Args:
         - vue_name: 访问的vue文件列表

        :Example:
         - 例: web_config.vue_name = vue
        '''
        self.__VUE_NAME = vue_name

    @property
    def is_web_proxy(self):
        '''
        获取浏览器是否开启了代理

        :Returns:
            返回浏览器是否开启了代理

        :Example:
         - 例: is_proxy = web_config.is_web_proxy
        '''
        return self.__IS_WEB_PROXY

    @is_web_proxy.setter
    def is_web_proxy(self, is_web_proxy):
        '''
        设置浏览器开启代理开关

        :Args:
         - is_web_proxy: 当前浏览器是否开启了代理

        :Example:
         - 例: web_config.is_web_proxy = is_web_proxy
        '''
        self.__IS_WEB_PROXY = is_web_proxy

    def set_customize_data(self, key, value):
        '''
        设置公共的缓存值，缓存值会放到字典中

        :Args:
         - key: 字典的键
         - value: 字典的值

        :Raises:
            KeyError: 字典中已含有此键

        :Example:
         - 例: web_config.set_customize_data("usename", "admin")
        '''
        fun_name = sys._getframe().f_back.f_code.co_name
        if "login" not in fun_name:
            raise Exception("此方法只能在登录方法中使用, 登录方法的方法名需要包含login")

        self.__CUSTOMIZE_DATA[key] = value

    def get_customize_data(self, key):
        '''
        获得公共的缓存值

        :Args:
         - key: 字典的键

        :Returns:
            字典中对应键的值

        :Raises:
            KeyError: 字典中不包含此键

        :Example:
         - 例: username = web_config.get_customize_data("usename")
        '''
        fun_name = sys._getframe().f_back.f_code.co_name
        if "login" not in fun_name:
            raise Exception("此方法只能在登录方法中使用,登录方法的方法名需要包含login")

        if key not in self.__CUSTOMIZE_DATA:
            raise KeyError("字典__COMMON中不含有键 {}".format(key))

        return self.__CUSTOMIZE_DATA[key]



web_config = WebConfig('primary')
web_config_secondary = WebConfig('secondary')


